package web后端.AOP_面向切面编程.进阶.通知类型及执行顺序;

/**
 * 通知类型
 */
public class index {
    /**
     * 通知类型<p>
     * 1、@Around：环绕通知，表示通知方法在原始方法前后执行<p>
     * 2、@Before：前置通知，表示通知方法在原始方法前执行<p>
     * 3、@After：后置通知，表示通知方法在原始方法后执行，无论原始方法是否有异常都会执行<p>
     * 4、@AfterReturning：返回后通知，表示通知方法在原始方法后执行，原始方法中有异常则不会执行<p>
     * 5、@AfterThrowing：异常后通知，表示原始方法发生异常后执行<p></p>
     * <p>
     * 注意：除了@Around外，被其余注解标识的方法都不需要自己调用方法执行<p>
     * 而@Around需要在方法形参中加一个ProceedingJoinPoint类型的形参<p>
     * 然后在方法中进行原始方法的调用（proceedingJoinPoint.proceed()）<p>
     * <p>
     * {@code @Around}环绕通知需要自己调用 ProceedingJoinPoint,proceed() 来让原始方法执行，其他通知不需要考虑目标方法执行<p>
     * {@code @Around}环绕通知方法的返回值，必须指定为object，来接收原始方法的返回值<p></p>
     * <p>
     * 切入点表达式的抽取：详见项目<a href="">springboot-study-auxiliary-system</a><p></p>
     * <p></p>
     * <p>
     * 通知的执行顺序（这里研究的是不同切面类中同类型通知的通知执行顺序
     * 而不是同一个切面类中不同类型通知的通知执行顺序）：<p>
     * 顺序一般由切面类类名决定<p>
     * 在原始方法之前执行的通知，类名排名越靠前越先执行<p>
     * 在原始方法之后执行的通知，类名排名越靠前越后执行<p></p>
     * <p>
     * 我们也可以在切面类上加一个@Order(数字)注解来控制执行顺序<p>
     * 目标方法之前执行的通知，数字越小越先执行<p>
     * 目标方法之后执行的通知，数字越小越后执行<p>
     *
     * @param args
     */
    public static void main(String[] args) {

    }
}
